<?php

declare(strict_types=1);
/**
 * This file is part of Hyperf.
 *
 * @link     https://www.hyperf.io
 * @document https://hyperf.wiki
 * @contact  group@hyperf.io
 * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
 */
use Hyperf\Kafka\Constants\KafkaStrategy;
use longlang\phpkafka\Client\SwooleClient;
use longlang\phpkafka\Socket\SwooleSocket;
use longlang\phpkafka\Timer\SwooleTimer;

return [
    'default' => [
        'enable' => false,
        'connect_timeout' => -1,//连接超时时间（单位：秒，支持小数），为 - 1 则不限制
        'send_timeout' => -1,//发送超时时间（单位：秒，支持小数），为 - 1 则不限制
        'recv_timeout' => -1,//接收超时时间（单位：秒，支持小数），为 - 1 则不限制
        'client_id' => '',//Kafka 客户端标识
        'max_write_attempts' => 3,//最大写入尝试次数
        //引导服务器，如果配置了该值，会自动连接该服务器，并自动更新 brokers
        'bootstrap_servers' => [
            '127.0.0.1:9092',
        ],
        'acks' => -1,//生产者要求领导者，在确认请求完成之前已收到的确认数值。允许的值：0 表示无确认，1 表示仅领导者，- 1 表示完整的 ISR。
        'producer_id' => -1,//生产者 ID
        'producer_epoch' => -1,//生产者 Epoch
        'partition_leader_epoch' => -1,//分区 Leader Epoch
        'interval' => 0,//未获取消息到消息时，延迟多少秒再次尝试，默认为 0 则不延迟（单位：秒，支持小数）
        'session_timeout' => 60,//如果超时后没有收到心跳信号，则协调器会认为该用户死亡。（单位：秒，支持小数）
        'rebalance_timeout' => 60,//重新平衡组时，协调器等待每个成员重新加入的最长时间（单位：秒，支持小数）
        'replica_id' => -1,//副本 ID
        'rack_id' => '',//机架编号
        'group_retry' => 5,//分组操作，匹配预设的错误码时，自动重试次数
        'group_retry_sleep' => 1,//分组操作重试延迟，单位：秒
        'group_heartbeat' => 3,//分组心跳时间间隔，单位：秒
        'offset_retry' => 5,//偏移量操作，匹配预设的错误码时，自动重试次数
        'auto_create_topic' => true,//是否需要自动创建 topic
        'partition_assignment_strategy' => KafkaStrategy::RANGE_ASSIGNOR,//消费者分区分配策略, 可选：范围分配(KafkaStrategy::RANGE_ASSIGNOR) 轮询分配(KafkaStrategy::ROUND_ROBIN_ASSIGNOR))
        'sasl' => [],//SASL 身份认证信息。为空则不发送身份认证信息 phpkafka 版本需 >= 1.2
        'ssl' => [],//	SSL 链接相关信息, 为空则不使用 SSL phpkafka 版本需 >= 1.2
        'client' => SwooleClient::class,
        'socket' => SwooleSocket::class,
        'timer' => SwooleTimer::class,
        'consume_timeout' => 600,
        'exception_callback' => null,
    ],
];
